In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plot
import plotly.graph_objects as go
import plotly.offline as off
In [10]:
#import plotly.io as pio
#pio.renderers
#pio.renderers.default = "svg"
In [18]:
ls *models*
acp_digital_cliff_cl_models.csv   acp_digital_cliff_enr_models.csv

Enrollments Model¶

In [2]:
infile='acp_digital_cliff_enr_models.csv'
dfe=pd.read_csv(infile)
dfe.head()
Out[2]:
Data Month Total Support avg Enrollment Rate avg Total Support cur rate Enrollment Rate cur rate Total Support +10 pct rate Enrollment Rate +10 pct rate Total Support +25 pct rate Enrollment Rate +25 pct rate Total Support +50 pct rate Enrollment Rate +50 pct rate
0 2022-01-01 1.886235 18.465836 1.886235 18.465836 1.886235 18.465836 1.886235 18.465836 1.886235 18.465836
1 2022-02-01 3.882814 19.546085 3.882814 19.546085 3.882814 19.546085 3.882814 19.546085 3.882814 19.546085
2 2022-03-01 6.052887 21.244550 6.052887 21.244550 6.052887 21.244550 6.052887 21.244550 6.052887 21.244550
3 2022-04-01 8.304570 22.043498 8.304570 22.043498 8.304570 22.043498 8.304570 22.043498 8.304570 22.043498
4 2022-05-01 10.668780 23.145114 10.668780 23.145114 10.668780 23.145114 10.668780 23.145114 10.668780 23.145114
In [101]:
dfe.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48 entries, 0 to 47
Data columns (total 11 columns):
 #   Column                        Non-Null Count  Dtype  
---  ------                        --------------  -----  
 0   Data Month                    48 non-null     object 
 1   Total Support avg             48 non-null     float64
 2   Enrollment Rate avg           48 non-null     float64
 3   Total Support cur rate        48 non-null     float64
 4   Enrollment Rate cur rate      48 non-null     float64
 5   Total Support +10 pct rate    48 non-null     float64
 6   Enrollment Rate +10 pct rate  48 non-null     float64
 7   Total Support +25 pct rate    48 non-null     float64
 8   Enrollment Rate +25 pct rate  48 non-null     float64
 9   Total Support +50 pct rate    48 non-null     float64
 10  Enrollment Rate +50 pct rate  48 non-null     float64
dtypes: float64(10), object(1)
memory usage: 4.2+ KB
In [3]:
new_funds={'Total Support avg': '60 Days Average',
          'Total Support cur rate':'Current Rate',
          'Total Support +10 pct rate':'%10 accelerator',
          'Total Support +25 pct rate':'%25 accelerator',
          'Total Support +50 pct rate':'%50 accelerator'}

new_enr={'Enrollment Rate avg': 'Enrollment Rate 60 Days Average',
          'Enrollment Rate cur rate':'Enrollment Rate Current Rate',
          'Enrollment Rate +10 pct rate':'Enrollment Rate %10 accelerator',
          'Enrollment Rate +25 pct rate':'Enrollment Rate %25 accelerator',
          'Enrollment Rate +50 pct rate':'Enrollment Rate %50 accelerator'}

#dfe.rename(columns=new_name,inplace=True)
#dfe.rename(columns=new_enr,inplace=True)



#col_plot=['60 Days Average','Current Rate','%10 accelerator','%25 accelerator','%50 accelerator']

col_plot=['Total Support avg',
          'Total Support cur rate',
          'Total Support +10 pct rate',
          'Total Support +25 pct rate',
          'Total Support +50 pct rate']
In [4]:
fig=go.Figure()
for col in col_plot:

    data=dfe[col]
    
    ro=dfe[dfe[col]<=100]
    
    p=dfe.iloc[ro.shape[0]-1]
    
    ext=' '.join(col.split()[2:])
    
    enr_r='Enrollment Rate '+' '.join(col.split()[2:])
    lab=new_enr[enr_r]
   
    
    pct=data.shape[0]*[round(p[enr_r],1)]
   # print(pct)
    #txt=p[lab]
    
    fig.add_trace(
        go.Scatter(x=dfe['Data Month'],y=data,name=lab,opacity=0.8,text=pct)
                  )


fig.add_trace(go.Scatter(x=['2022-01-01','2024-12-01'],y=[100,100],name='100 %',opacity=0.8))
fig.update_layout(xaxis_range=['2022-01-01','2024-12-01'],yaxis_range=[0,120], title_text='ACP Digital Cliff from Enrollemnts')
fig.update_yaxes(title_text='% of Total Funds Spent')
fig.update_xaxes(title_text='Date')

fig.show()

Clamins Model¶

In [5]:
infile='acp_digital_cliff_cl_models.csv'
dfc=pd.read_csv(infile)
dfc.head()
Out[5]:
data_month total_support_c_pct_c_rate total_claimed_pct_c_rate total_support_c_pct_+10pct_rate total_claimed_pct_+10pct_rate total_support_c_pct_+25pct_rate total_claimed_pct_+25pct_rate total_support_c_pct_+50pct_rate total_claimed_pct_+50pct_rate
0 2022-01-01 1.601950 15.682745 1.601950 15.682745 1.601950 15.682745 1.601950 15.682745
1 2022-02-01 3.297034 16.594520 3.297034 16.594520 3.297034 16.594520 3.297034 16.594520
2 2022-03-01 5.137686 18.019583 5.137686 18.019583 5.137686 18.019583 5.137686 18.019583
3 2022-04-01 7.046646 18.688316 7.046646 18.688316 7.046646 18.688316 7.046646 18.688316
4 2022-05-01 9.087533 19.979848 9.087533 19.979848 9.087533 19.979848 9.087533 19.979848
In [6]:
dfc.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48 entries, 0 to 47
Data columns (total 9 columns):
 #   Column                           Non-Null Count  Dtype  
---  ------                           --------------  -----  
 0   data_month                       48 non-null     object 
 1   total_support_c_pct_c_rate       48 non-null     float64
 2   total_claimed_pct_c_rate         48 non-null     float64
 3   total_support_c_pct_+10pct_rate  48 non-null     float64
 4   total_claimed_pct_+10pct_rate    48 non-null     float64
 5   total_support_c_pct_+25pct_rate  48 non-null     float64
 6   total_claimed_pct_+25pct_rate    48 non-null     float64
 7   total_support_c_pct_+50pct_rate  48 non-null     float64
 8   total_claimed_pct_+50pct_rate    48 non-null     float64
dtypes: float64(8), object(1)
memory usage: 3.5+ KB
In [8]:
new_funds={
          'total_support_c_pct_c_rate':'Current Rate',
          'total_support_c_pct_+10pct_rate':'%10 accelerator',
          'total_support_c_pct_+25pct_rate':'%25 accelerator',
          'total_support_c_pct_+50pct_rate':'%50 accelerator'}

new_enr={ 'total_claimed_pct_c_rate': 'Claims Current Rate',
          'total_claimed_pct_+10pct_rate':'Claims %10 accelerator',
          'total_claimed_pct_+25pct_rate':'Claims %25 accelerator',
          'total_claimed_pct_+50pct_rate':'Claims %50 accelerator'}

#dfe.rename(columns=new_name,inplace=True)
#dfe.rename(columns=new_enr,inplace=True)



#col_plot=['60 Days Average','Current Rate','%10 accelerator','%25 accelerator','%50 accelerator']

col_plot=['total_support_c_pct_c_rate',
          'total_support_c_pct_+10pct_rate',
          'total_support_c_pct_+25pct_rate',
          'total_support_c_pct_+50pct_rate']
In [9]:
fig=go.Figure()
for col in col_plot:

    data=dfc[col]
    
    ro=dfc[dfc[col]<=100]
    
    p=dfc.iloc[ro.shape[0]-1]
    
    ext='_'.join(col.split('_')[3:])
    
    enr_r='total_claimed_'+ext
    lab=new_enr[enr_r]
   
    
    pct=data.shape[0]*[round(p[enr_r],1)]
   # print(pct)
    #txt=p[lab]
    
    fig.add_trace(
        go.Scatter(x=dfe['Data Month'],y=data,name=lab,opacity=0.8,text=pct)
                  )


fig.add_trace(go.Scatter(x=['2022-01-01','2024-12-01'],y=[100,100],name='100 %',opacity=0.8))
fig.update_layout(xaxis_range=['2022-01-01','2024-12-01'],yaxis_range=[0,120], title_text='ACP Digital Cliff from Enrollemnts')
fig.update_yaxes(title_text='% of Total Funds Spent')
fig.update_xaxes(title_text='Date')

off.iplot(fig)
In [ ]: